/**
 * 
 */
package com.lanswon.qzsmk.service.cardManageService;

import java.text.ParseException;
import java.util.List;
import java.util.Map;

import com.lanswon.qzsmk.base.DwzPage;
import com.lanswon.qzsmk.exception.ApplicationException;
import com.lanswon.qzsmk.model.CardData;
import com.lanswon.qzsmk.model.CollAttach;
import com.lanswon.qzsmk.model.Personal;
import com.lanswon.qzsmk.vo.Other;
import com.lanswon.qzsmk.vo.ResultVo;
import com.lanswon.qzsmk.vo.ShowChargeVo;
import com.lanswon.qzsmk.vo.VoucherVo;

/**
 * 申请卡
 * 
 * @author sun
 *
 */
public interface ApplyCardService {

	/**
	 * 批量申请(公司为一个单位)
	 * 
	 * @param filePath
	 *            导入文档路径
	 * @return
	 * @throws Exception
	 */
	public Map<String,Object> BA( String[] paths,String root) throws Exception;

	/**
	 * 导出：批量申请,检查文档数据格式不对
	 * 
	 * @param filePath
	 *            输出路径
	 * @throws Exception 
	 */
	public List<String> exportData(String[] applyBatchNo,String root)
			throws Exception;

	/**
	 * 单笔申请
	 * 
	 * @return
	 */
	public ResultVo singleApplication( Personal p,String cardProductCode,String cardPhysicalType);

	/**
	 * 根据批次获取个人基本信息列表
	 * 
	 * @param no
	 *            申请批次号
	 * @return
	 */
	public List<Personal> getPersonalByAplyBatchNo(String no) throws Exception;

	/**
	 * 根据证件号码检查能否办指定卡产品
	 * @param paperType
	 * @param paperNo
	 * @param cardProductCode
	 * @return
	 */
	public ResultVo checkIsCardProductbyPaperNo(String paperType ,String paperNo  , String cardProductCode);

	/**
	 * 保存单笔申请的附件
	 * @param request
	 * @param paperNo
	 * @return
	 * @throws Exception
	 */
	ResultVo saveSingleEnclosure(List<CollAttach> list);
	
	/**
	 * 读取excel 测试用
	 * @param paths
	 * @throws ParseException
	 * @throws ApplicationException
	 * @throws Exception 
	 */
	void excel(String[] paths) throws Exception;
	
	/**
	 * 生成卡面号
	 * @param prefix
	 * @return
	 * @throws Exception
	 */
	public String generatorCardNo(String prefix,String cardPCode) throws Exception;
	
	/**
	 * 生成卡面号
	 * @param prefix
	 * @param cd
	 * @return
	 * @throws Exception
	 */
	public String generatorCardNo(String prefix,CardData cd) throws Exception;
	
	/**
	 * 根据证件号码获取个人信息
	 * @param paperType 证件类型
	 * @param paperNo 证件号码
	 * @return 个人信息
	 */
	public ResultVo queryPersonalByPaperNoAndPaperType(String paperType,String paperNo);
	
	/**
	 * 分页查询未导入的申请批次号,暂未加搜索条件
	 * @return
	 */
	public DwzPage<Other> queryApplyBatchListByPage(int currentPage,int pageSize,String root);
	
	/**
	 * 查询进度
	 * @param paperNo 证件号码
	 * @param paperType 证件类型
	 * @return 0：待申请  1：已申请待领取 2：已领取
	 */
	public ResultVo queryApplySchedule(String paperNo, String paperType,String cardPCode);                                


	/**
	 * 获取所有卡产品
	 * @param paperType
	 * @param paperNo
	 * @param condition 过滤条件  0查询全部   1未申请  2待领取   3已经领取
	 * @return
	 */
	public ResultVo query(String paperType, String paperNo, String condition);

	/**
	 * 采集单编号生成
	 * @param prefix 编号前缀
	 * @return
	 */
	public ResultVo generateCollectionNo();
	
	/**
	 * 保存采集单
	 * @param 
	 * @return
	 */
	public ResultVo saveCollection(Personal p,String cardCode);
	
	/**
	 * 单笔申请照片上传
	 * @param imageBasecode64 照片编码
	 * @param path 上传路径
	 * @param photoName 照片名（证件号）
	 * @param photoType 照片格式（.JPG  .PNG）
	 * @param paperType 证件类型
	 */
	 public ResultVo uploadImageByApplicationSingle(String imageBasecode64, String absoluteRoot,String path, String photoName, String photoType,
			String paperType);

	/**
	 * 查询所有批次号
	 * @return
	 */
	 public List<String> queryAllApplyNos();
	 
	 
	 /**
	  * 修改个人信息
	  * @param p
	  * @return
	  */
	 public boolean modifyPersonal(Personal p); 
	 
	 /**
	  * 模糊查询个人信息
	  * @param paperType
	  * @param paperNo
	  * @param mobile
	  * @return
	 * @throws ApplicationException 
	  */
	 public List<Personal> queryPersonal(String paperType,String paperNo,String mobile) throws ApplicationException;
	 
	 /**
	  * 检验唯一性
	  * @param paperType
	  * @param paperNo
	 * @param customerNo 
	  * @return
	 * @throws ApplicationException 
	  */
	 boolean checkExistPerson(String paperType,String paperNo, String customerNo) throws ApplicationException;

	 /**
	  * 批量申请-收费
	  * @param scv
	  * @throws ApplicationException
	  */
	 VoucherVo charge(ShowChargeVo scv) throws ApplicationException;
	 
	 /**
	  * 批量申请-收费窗口
	  * @return
	 * @throws ApplicationException 
	  */
	 ShowChargeVo showCharge(String path,String applyBatchNo) throws ApplicationException;

	 /**
	  * 批量申请市民卡号
	  * @param prefix
	  * @param list
	  * @param size
	  * @return
	  * @throws Exception
	  */
	 List<String> generatorCardNo_list(String prefix,List<String> list,int size) throws Exception;
}
